(function ($, __) {
    "use strict";
    __.register_autoload("user.register", function () {



        /* khởi tạo các phần tử */
        var $form = $("#register-form"),
            $username = $("#username", $form).validate_on_keyup(__.Regex.word(4, 64), "Yêu cầu tên đăng nhập từ 4 - 64 kí tự"),
            $password = $("#password", $form).validate_on_keyup(__.Regex.word(6, 64), "Yêu cầu mật khẩu từ 6 - 64 kí tự"),
            $re_password = $("#repassword", $form).validate_on_keyup(__.Regex.word(6, 64), "Yêu cầu nhập lại mật khẩu"),
            $display_name = $("#name", $form).validate_on_keyup(__.Regex.word(4, 128), "Yêu cầu tên hiển thị 4 - 128 kí tự"),
            $email = $("#email", $form).validate_on_keyup(__.Regex.EMAIL, "Vui lòng nhập email đúng định dạng"),
            $phone = $("#phone", $form).validate_on_keyup([__.Regex.PHONE, __.Regex.NULL],
                "Vui lòng nhập số điện thoại hợp lệ hoặc để trống!"),
            $captcha = $("#captcha", $form).validate_on_keyup(__.Regex.word(4, 4), "Nhập 4 kí tự trên"),
            $owner = $("#owner", $form),
            $term_accepted = $("#term-accepted", $form),
            $submit = $("#submit", $form);

        // Intial gender radio
        var old_sex_val = $("#old_sex", $form).val();
        $("input[name=gender][value=" + old_sex_val + "]").attr("checked", true);

        $term_accepted.click(function () {
            $submit.attr("disabled", !$term_accepted.is(":checked"));
        });

        $re_password.re_validate = function () {
            if ($re_password.validate()) {
                if ($re_password.val() !== $password.val()) {
                    $re_password.helper("error", "Vui lòng nhập lại chính xác mật khẩu");
                } else {
                    return true;
                }
            }
            return false;
        };

        var ajax_checker = function (type, prefix, $e) {
            if ($e.validate()) {
                var val = $e.val();
                if (!__.g_cache.has(type + val)) {
                    $.post(__.make_url("user/exists"), {type: type, needed: val, csrf_token: __.csrf_token()}, function (response) {
                        __.g_cache.store(type + val, response.code);
                        ajax_checker(type, prefix, $e);
                    });
                } else {
                    if (__.g_cache.store(type + val) === true) {
                        $e.helper("error", prefix + " [" + val + "] đã tồn tại, vui lòng chọn giá trị khác");
                    } else {
                        $e.helper("success", prefix + " hợp lệ, có thể sử dụng");
                    }
                }
            }
        };

        $username.keyup(function () {
            ajax_checker("username", "Tên đăng nhập", $username);
        });

        $email.keyup(function () {
            ajax_checker("email", "Địa chỉ email", $email);
        });

        $re_password.keyup(function () {
            $re_password.re_validate();
        });

        $form.submit(function () {
            if (!$username.validate()) {
                __.error("Tên đăng nhập không hợp lệ, vui lòng kiểm tra lại", $username);
            } else if (!$password.validate()) {
                __.error("Mật khẩu không hợp lệ, vui lòng kiểm tra lại (độ dài từ 4 - 64 kí tự)", $password);
            } else if (!$re_password.re_validate()) {
                __.error("Vui lòng nhập lại 2 mật khẩu trùng khớp (để tránh nhầm lẫn)", $re_password);
            } else if (!$display_name.validate()) {
                __.error("Vui lòng nhập tên hiển thị.<br>Tên này sẽ được dùng để hiển ở những bài viết, bình luận của bạn", $display_name);
            } else if (!$email.validate()) {
                __.error("Vui lòng nhập địa chỉ email hợp.<br> Địa chỉ này sẽ được dùng để khôi phục mật khẩu cho bạn!", $email);
            } else if (!$captcha.validate()) {
                __.error("Để xác nhận bạn đang đăng ký bằng tay, vui lòng nhập mã bảo mật", $captcha);
            } else if (!$term_accepted.is(":checked")) {
                __.error("Vui lòng đồng ý với các điều khoản sử dụng dịch vụ (bạn vui lòng xem bên phải!)", $term_accepted);
            } else {
                return true;
            }
            return false;
        });

    });
}(window.jQuery, window.jqExt));